package com.itheima.d5_polymorphic.demo1;

//目标：了解多态的概念和使用前提
public class Demo {
    public static void main(String[] args) {
        /**
         * 多态概念：在继承父类或者实现接口的基础上，允许同一类事物调用同一种功能呈现不同的状态
         *
         * 表现形式：
         *      父类 变量 = 子类对象;
         *      接口 变量 = 实现类对象;
         *
         * 需求：
         *      定义Animal动物类作为父类，规定吃饭、喝水功能。
         *      定义子类Dog和Cat，分别创建Dog对象和Cat对象，调用吃饭功能和喝水功能
         */
        //1.定义Animal动物类，按要求完成方法

        //2.定义Dog和Cat作为子类，去继承Animal动物类

        //3.测试
        //Dog dog = new Dog(); //这只狗是狗，dog是狗类型
        //Cat cat = new Cat(); //这只猫是猫，cat是猫类型

        //上面dog和cat并不是同一种类型！
        //想办法把它们变成同一种类型：Java允许父类类型变量接收子类对象（接口类型变量接收实现类对象）
        Animal dog = new Dog(); //这只狗是动物，dog是动物类型
        Animal cat = new Cat(); //这只猫是动物，cat是动物类型

        //调用喝水和吃饭
        dog.drink();
        dog.eat();
        System.out.println("------------");

        cat.drink();
        cat.eat();

        //4.多态的前提：
        //要有继承或实现的关系
        //要有方法的重写
        //要有父类引用指向子类对象（接口引用指向实现类对象）
    }
}
